Autogenerated HTML docs for v1.7.3.2-245-g03276 
diff --git a/technical/api-index.html b/technical/api-index.html index eb119f8..93d6862 100644 --- a/technical/api-index.html +++ b/technical/api-index.html 
@@ -3,7 +3,8 @@  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">   <head>   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  -<meta name="generator" content="AsciiDoc 8.2.5" />  +<meta name="generator" content="AsciiDoc 8.4.5" />  +<title>GIT API Documents</title>   <style type="text/css">   /* Debug borders */   p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {  @@ -26,10 +27,12 @@    em {   font-style: italic;  + color: navy;   }     strong {   font-weight: bold;  + color: #083194;   }     tt {  @@ -71,6 +74,10 @@  margin-bottom: 0.5em;   }    +ul, ol, li > p {  + margin-top: 0;  +}  +   pre {   padding: 0;   margin: 0;  @@ -84,7 +91,7 @@  }   span#email {   }  -span#revision {  +span#revnumber, span#revdate, span#revremark {   font-family: sans-serif;   }    @@ -104,11 +111,13 @@  padding-bottom: 0.5em;   }    -div#preamble,  +div#preamble {  + margin-top: 1.5em;  + margin-bottom: 1.5em;  +}   div.tableblock, div.imageblock, div.exampleblock, div.verseblock,   div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,   div.admonitionblock {  - margin-right: 10%;   margin-top: 1.5em;   margin-bottom: 1.5em;   }  @@ -123,6 +132,7 @@    /* Block element titles. */   div.title, caption.title {  + color: #527bbd;   font-family: sans-serif;   font-weight: bold;   text-align: left;  @@ -149,22 +159,33 @@  padding: 0.5em;   }    -div.listingblock {  - margin-right: 0%;  -}   div.listingblock > div.content {   border: 1px solid silver;   background: #f4f4f4;   padding: 0.5em;   }    -div.quoteblock > div.content {  +div.quoteblock {   padding-left: 2.0em;  + margin-right: 10%;   }  -  -div.attribution {  +div.quoteblock > div.attribution {  + padding-top: 0.5em;   text-align: right;   }  +  +div.verseblock {  + padding-left: 2.0em;  + margin-right: 10%;  +}  +div.verseblock > div.content {  + white-space: pre;  +}  +div.verseblock > div.attribution {  + padding-top: 0.75em;  + text-align: left;  +}  +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */   div.verseblock + div.attribution {   text-align: left;   }  @@ -187,13 +208,9 @@  padding: 0.5em;   }    -div.verseblock div.content {  - white-space: pre;  -}  -   div.imageblock div.content { padding-left: 0; }  -div.imageblock img { border: 1px solid silver; }   span.image img { border-style: none; }  +a.image:visited { color: white; }     dl {   margin-top: 0.8em;  @@ -202,18 +219,38 @@  dt {   margin-top: 0.5em;   margin-bottom: 0;  - font-style: italic;  + font-style: normal;  + color: navy;   }   dd > *:first-child {  - margin-top: 0;  + margin-top: 0.1em;   }     ul, ol {   list-style-position: outside;   }  -div.olist2 ol {  +ol.arabic {  + list-style-type: decimal;  +}  +ol.loweralpha {   list-style-type: lower-alpha;   }  +ol.upperalpha {  + list-style-type: upper-alpha;  +}  +ol.lowerroman {  + list-style-type: lower-roman;  +}  +ol.upperroman {  + list-style-type: upper-roman;  +}  +  +div.compact ul, div.compact ol,  +div.compact p, div.compact p,  +div.compact div, div.compact div {  + margin-top: 0.1em;  + margin-bottom: 0.1em;  +}     div.tableblock > table {   border: 3px solid #527bbd;  @@ -225,22 +262,53 @@  tfoot {   font-weight: bold;   }  +td > div.verse {  + white-space: pre;  +}  +p.table {  + margin-top: 0;  +}  +/* Because the table frame attribute is overriden by CSS in most browsers. */  +div.tableblock > table[frame="void"] {  + border-style: none;  +}  +div.tableblock > table[frame="hsides"] {  + border-left-style: none;  + border-right-style: none;  +}  +div.tableblock > table[frame="vsides"] {  + border-top-style: none;  + border-bottom-style: none;  +}    -div.hlist {  +  +div.hdlist {   margin-top: 0.8em;   margin-bottom: 0.8em;   }  -div.hlist td {  - padding-bottom: 5px;  +div.hdlist tr {  + padding-bottom: 15px;   }  -td.hlist1 {  +dt.hdlist1.strong, td.hdlist1.strong {  + font-weight: bold;  +}  +td.hdlist1 {   vertical-align: top;  - font-style: italic;  + font-style: normal;   padding-right: 0.8em;  + color: navy;   }  -td.hlist2 {  +td.hdlist2 {   vertical-align: top;   }  +div.hdlist.compact tr {  + margin: 0;  + padding-bottom: 0;  +}  +  +.comment {  + background: yellow;  +}     @media print {   div#footer-badges { display: none; }  @@ -279,6 +347,7 @@  padding: 0.5em;   }   div.sidebar-title, div.image-title {  + color: #527bbd;   font-family: sans-serif;   font-weight: bold;   margin-top: 0.0em;  @@ -291,8 +360,17 @@  padding: 0.5em;   }    -div.quoteblock-content {  - padding-left: 2.0em;  +div.quoteblock-attribution {  + padding-top: 0.5em;  + text-align: right;  +}  +  +div.verseblock-content {  + white-space: pre;  +}  +div.verseblock-attribution {  + padding-top: 0.75em;  + text-align: left;   }     div.exampleblock-content {  @@ -303,7 +381,6 @@  /* IE6 sets dynamically generated links as visited. */   div#toc a:visited { color: blue; }   </style>  -<title>GIT API Documents</title>   </head>   <body>   <div id="header">  @@ -311,9 +388,9 @@  </div>   <div id="preamble">   <div class="sectionbody">  -<div class="para"><p>GIT has grown a set of internal API over time. This collection  +<div class="paragraph"><p>GIT has grown a set of internal API over time. This collection   documents them.</p></div>  -<div class="ilist"><ul>  +<div class="ulist"><ul>   <li>   <p>   <a href="api-allocation-growing.html">allocation growing API</a>  @@ -411,6 +488,11 @@  </li>   <li>   <p>  +<a href="api-sigchain.html">sigchain API</a>  +</p>  +</li>  +<li>  +<p>   <a href="api-strbuf.html">strbuf API</a>   </p>   </li>  @@ -430,12 +512,12 @@  </p>   </li>   </ul></div>  -<div class="para"><p>2007-11-24</p></div>  +<div class="paragraph"><p>2007-11-24</p></div>   </div>   </div>   <div id="footer">   <div id="footer-text">  -Last updated 2010-09-18 23:57:18 UTC  +Last updated 2010-11-18 00:52:24 UTC   </div>   </div>   </body>  
diff --git a/technical/api-index.txt b/technical/api-index.txt index 9db48c2..62da0df 100644 --- a/technical/api-index.txt +++ b/technical/api-index.txt 
@@ -26,6 +26,7 @@  * link:api-revision-walking.html[revision walking API]  * link:api-run-command.html[run-command API]  * link:api-setup.html[setup API] +* link:api-sigchain.html[sigchain API]  * link:api-strbuf.html[strbuf API]  * link:api-string-list.html[string-list API]  * link:api-tree-walking.html[tree walking API] 
diff --git a/technical/api-sigchain.html b/technical/api-sigchain.html new file mode 100644 index 0000000..2f70672 --- /dev/null +++ b/technical/api-sigchain.html 
@@ -0,0 +1,442 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  +<head>  +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  +<meta name="generator" content="AsciiDoc 8.4.5" />  +<title>sigchain API</title>  +<style type="text/css">  +/* Debug borders */  +p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {  +/*  + border: 1px solid red;  +*/  +}  +  +body {  + margin: 1em 5% 1em 5%;  +}  +  +a {  + color: blue;  + text-decoration: underline;  +}  +a:visited {  + color: fuchsia;  +}  +  +em {  + font-style: italic;  + color: navy;  +}  +  +strong {  + font-weight: bold;  + color: #083194;  +}  +  +tt {  + color: navy;  +}  +  +h1, h2, h3, h4, h5, h6 {  + color: #527bbd;  + font-family: sans-serif;  + margin-top: 1.2em;  + margin-bottom: 0.5em;  + line-height: 1.3;  +}  +  +h1, h2, h3 {  + border-bottom: 2px solid silver;  +}  +h2 {  + padding-top: 0.5em;  +}  +h3 {  + float: left;  +}  +h3 + * {  + clear: left;  +}  +  +div.sectionbody {  + font-family: serif;  + margin-left: 0;  +}  +  +hr {  + border: 1px solid silver;  +}  +  +p {  + margin-top: 0.5em;  + margin-bottom: 0.5em;  +}  +  +ul, ol, li > p {  + margin-top: 0;  +}  +  +pre {  + padding: 0;  + margin: 0;  +}  +  +span#author {  + color: #527bbd;  + font-family: sans-serif;  + font-weight: bold;  + font-size: 1.1em;  +}  +span#email {  +}  +span#revnumber, span#revdate, span#revremark {  + font-family: sans-serif;  +}  +  +div#footer {  + font-family: sans-serif;  + font-size: small;  + border-top: 2px solid silver;  + padding-top: 0.5em;  + margin-top: 4.0em;  +}  +div#footer-text {  + float: left;  + padding-bottom: 0.5em;  +}  +div#footer-badges {  + float: right;  + padding-bottom: 0.5em;  +}  +  +div#preamble {  + margin-top: 1.5em;  + margin-bottom: 1.5em;  +}  +div.tableblock, div.imageblock, div.exampleblock, div.verseblock,  +div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,  +div.admonitionblock {  + margin-top: 1.5em;  + margin-bottom: 1.5em;  +}  +div.admonitionblock {  + margin-top: 2.5em;  + margin-bottom: 2.5em;  +}  +  +div.content { /* Block element content. */  + padding: 0;  +}  +  +/* Block element titles. */  +div.title, caption.title {  + color: #527bbd;  + font-family: sans-serif;  + font-weight: bold;  + text-align: left;  + margin-top: 1.0em;  + margin-bottom: 0.5em;  +}  +div.title + * {  + margin-top: 0;  +}  +  +td div.title:first-child {  + margin-top: 0.0em;  +}  +div.content div.title:first-child {  + margin-top: 0.0em;  +}  +div.content + div.title {  + margin-top: 0.0em;  +}  +  +div.sidebarblock > div.content {  + background: #ffffee;  + border: 1px solid silver;  + padding: 0.5em;  +}  +  +div.listingblock > div.content {  + border: 1px solid silver;  + background: #f4f4f4;  + padding: 0.5em;  +}  +  +div.quoteblock {  + padding-left: 2.0em;  + margin-right: 10%;  +}  +div.quoteblock > div.attribution {  + padding-top: 0.5em;  + text-align: right;  +}  +  +div.verseblock {  + padding-left: 2.0em;  + margin-right: 10%;  +}  +div.verseblock > div.content {  + white-space: pre;  +}  +div.verseblock > div.attribution {  + padding-top: 0.75em;  + text-align: left;  +}  +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */  +div.verseblock + div.attribution {  + text-align: left;  +}  +  +div.admonitionblock .icon {  + vertical-align: top;  + font-size: 1.1em;  + font-weight: bold;  + text-decoration: underline;  + color: #527bbd;  + padding-right: 0.5em;  +}  +div.admonitionblock td.content {  + padding-left: 0.5em;  + border-left: 2px solid silver;  +}  +  +div.exampleblock > div.content {  + border-left: 2px solid silver;  + padding: 0.5em;  +}  +  +div.imageblock div.content { padding-left: 0; }  +span.image img { border-style: none; }  +a.image:visited { color: white; }  +  +dl {  + margin-top: 0.8em;  + margin-bottom: 0.8em;  +}  +dt {  + margin-top: 0.5em;  + margin-bottom: 0;  + font-style: normal;  + color: navy;  +}  +dd > *:first-child {  + margin-top: 0.1em;  +}  +  +ul, ol {  + list-style-position: outside;  +}  +ol.arabic {  + list-style-type: decimal;  +}  +ol.loweralpha {  + list-style-type: lower-alpha;  +}  +ol.upperalpha {  + list-style-type: upper-alpha;  +}  +ol.lowerroman {  + list-style-type: lower-roman;  +}  +ol.upperroman {  + list-style-type: upper-roman;  +}  +  +div.compact ul, div.compact ol,  +div.compact p, div.compact p,  +div.compact div, div.compact div {  + margin-top: 0.1em;  + margin-bottom: 0.1em;  +}  +  +div.tableblock > table {  + border: 3px solid #527bbd;  +}  +thead {  + font-family: sans-serif;  + font-weight: bold;  +}  +tfoot {  + font-weight: bold;  +}  +td > div.verse {  + white-space: pre;  +}  +p.table {  + margin-top: 0;  +}  +/* Because the table frame attribute is overriden by CSS in most browsers. */  +div.tableblock > table[frame="void"] {  + border-style: none;  +}  +div.tableblock > table[frame="hsides"] {  + border-left-style: none;  + border-right-style: none;  +}  +div.tableblock > table[frame="vsides"] {  + border-top-style: none;  + border-bottom-style: none;  +}  +  +  +div.hdlist {  + margin-top: 0.8em;  + margin-bottom: 0.8em;  +}  +div.hdlist tr {  + padding-bottom: 15px;  +}  +dt.hdlist1.strong, td.hdlist1.strong {  + font-weight: bold;  +}  +td.hdlist1 {  + vertical-align: top;  + font-style: normal;  + padding-right: 0.8em;  + color: navy;  +}  +td.hdlist2 {  + vertical-align: top;  +}  +div.hdlist.compact tr {  + margin: 0;  + padding-bottom: 0;  +}  +  +.comment {  + background: yellow;  +}  +  +@media print {  + div#footer-badges { display: none; }  +}  +  +div#toctitle {  + color: #527bbd;  + font-family: sans-serif;  + font-size: 1.1em;  + font-weight: bold;  + margin-top: 1.0em;  + margin-bottom: 0.1em;  +}  +  +div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {  + margin-top: 0;  + margin-bottom: 0;  +}  +div.toclevel2 {  + margin-left: 2em;  + font-size: 0.9em;  +}  +div.toclevel3 {  + margin-left: 4em;  + font-size: 0.9em;  +}  +div.toclevel4 {  + margin-left: 6em;  + font-size: 0.9em;  +}  +/* Workarounds for IE6's broken and incomplete CSS2. */  +  +div.sidebar-content {  + background: #ffffee;  + border: 1px solid silver;  + padding: 0.5em;  +}  +div.sidebar-title, div.image-title {  + color: #527bbd;  + font-family: sans-serif;  + font-weight: bold;  + margin-top: 0.0em;  + margin-bottom: 0.5em;  +}  +  +div.listingblock div.content {  + border: 1px solid silver;  + background: #f4f4f4;  + padding: 0.5em;  +}  +  +div.quoteblock-attribution {  + padding-top: 0.5em;  + text-align: right;  +}  +  +div.verseblock-content {  + white-space: pre;  +}  +div.verseblock-attribution {  + padding-top: 0.75em;  + text-align: left;  +}  +  +div.exampleblock-content {  + border-left: 2px solid silver;  + padding-left: 0.5em;  +}  +  +/* IE6 sets dynamically generated links as visited. */  +div#toc a:visited { color: blue; }  +</style>  +</head>  +<body>  +<div id="header">  +<h1>sigchain API</h1>  +</div>  +<div id="preamble">  +<div class="sectionbody">  +<div class="paragraph"><p>Code often wants to set a signal handler to clean up temporary files or  +other work-in-progress when we die unexpectedly. For multiple pieces of  +code to do this without conflicting, each piece of code must remember  +the old value of the handler and restore it either when:</p></div>  +<div class="olist arabic"><ol class="arabic">  +<li>  +<p>  +The work-in-progress is finished, and the handler is no longer  + necessary. The handler should revert to the original behavior  + (either another handler, SIG_DFL, or SIG_IGN).  +</p>  +</li>  +<li>  +<p>  +The signal is received. We should then do our cleanup, then chain  + to the next handler (or die if it is SIG_DFL).  +</p>  +</li>  +</ol></div>  +<div class="paragraph"><p>Sigchain is a tiny library for keeping a stack of handlers. Your handler  +and installation code should look something like:</p></div>  +<div class="listingblock">  +<div class="content">  +<pre><tt> void clean_foo_on_signal(int sig)  + {  + clean_foo();  + sigchain_pop(sig);  + raise(sig);  + }  +  + void other_func()  + {  + sigchain_push_common(clean_foo_on_signal);  + mess_up_foo();  + clean_foo();  + }</tt></pre>  +</div></div>  +<div class="paragraph"><p>Handlers are given the typdef of sigchain_fun. This is the same type  +that is given to signal() or sigaction(). It is perfectly reasonable to  +push SIG_DFL or SIG_IGN onto the stack.</p></div>  +<div class="paragraph"><p>You can sigchain_push and sigchain_pop individual signals. For  +convenience, sigchain_push_common will push the handler onto the stack  +for many common signals.</p></div>  +</div>  +</div>  +<div id="footer">  +<div id="footer-text">  +Last updated 2010-11-18 00:51:23 UTC  +</div>  +</div>  +</body>  +</html>  
diff --git a/technical/api-sigchain.txt b/technical/api-sigchain.txt new file mode 100644 index 0000000..535cdff --- /dev/null +++ b/technical/api-sigchain.txt 
@@ -0,0 +1,41 @@ +sigchain API +============ + +Code often wants to set a signal handler to clean up temporary files or +other work-in-progress when we die unexpectedly. For multiple pieces of +code to do this without conflicting, each piece of code must remember +the old value of the handler and restore it either when: + + 1. The work-in-progress is finished, and the handler is no longer + necessary. The handler should revert to the original behavior + (either another handler, SIG_DFL, or SIG_IGN). + + 2. The signal is received. We should then do our cleanup, then chain + to the next handler (or die if it is SIG_DFL). + +Sigchain is a tiny library for keeping a stack of handlers. Your handler +and installation code should look something like: + +------------------------------------------ + void clean_foo_on_signal(int sig) + { + clean_foo(); + sigchain_pop(sig); + raise(sig); + } + + void other_func() + { + sigchain_push_common(clean_foo_on_signal); + mess_up_foo(); + clean_foo(); + } +------------------------------------------ + +Handlers are given the typdef of sigchain_fun. This is the same type +that is given to signal() or sigaction(). It is perfectly reasonable to +push SIG_DFL or SIG_IGN onto the stack. + +You can sigchain_push and sigchain_pop individual signals. For +convenience, sigchain_push_common will push the handler onto the stack +for many common signals.